#ifndef __LYNX_SOUND_C_HPP_INCLUDED__
#define __LYNX_SOUND_C_HPP_INCLUDED__

#include <AL/al.h>
#include "LynxSound.hpp"

namespace Lynx
{
namespace Audio
{

class Sound_C : public Sound
{
public:
    Sound_C(SoundSource *source, bool play_looped, bool start_paused);

    Sound_C(SoundSource *source, bool play_looped, bool start_paused, const Myth::Math::Vector3f &vec);

    virtual ~Sound_C();

    virtual SoundSource *get_source(void) const;

    virtual void play(void);

    virtual void pause(void);

    virtual void stop(void);

    virtual bool is_finished(void) const;

    virtual float get_volume(void) const;

    virtual void set_volume(float volume);

    virtual bool is_looping(void) const;

    virtual void set_looping(bool looping = true);

    virtual void set_pitch(float pitch = 1.0f);

    virtual float get_pitch(void) const;

    virtual void set_maximum_falloff_distance(float max);

    virtual float get_maximum_falloff_distance(void) const;

    virtual void set_rolloff_factor(float factor);

    virtual float get_rolloff_factor(void) const;

    virtual void set_reference_distance(float distance);

    virtual float get_reference_distance(void) const;

    virtual void set_position(const Myth::Math::Vector3f &position);

    virtual Myth::Math::Vector3f get_position(void) const;

    virtual void set_velocity(const Myth::Math::Vector3f &velocity);

    virtual Myth::Math::Vector3f get_velocity(void) const;

    ALuint get_internal_identifier(void) const;

private:
    ALuint mSound;
    SoundSource *mSource;
};

} // namespace Audio
} // namespace Lynx

#endif // __LYNX_SOUND_C_HPP_INCLUDED__

